home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / c / genmo112.lha / GTB-Modula / GenModula / GenerateGadgets.mod < prev    next >
Encoding:
Modula Implementation  |  1993-09-28  |  40.9 KB  |  1,466 lines

  1. IMPLEMENTATION MODULE GenerateGadgets;
  2.  
  3. (*
  4.  * -------------------------------------------------------------------------
  5.  *
  6.  *    :Program.    GenModula
  7.  *    :Contents.    A Modula 2 Sourcecode generator for GadToolsBox
  8.  *
  9.  *    :Author.    Reiner B. Nix
  10.  *    :Address.    Geranienhof 2, 50769 Köln Seeberg
  11.  *    :Address.    rbnix@pool.informatik.rwth-aachen.de
  12.  *    :Copyright.    Reiner B. Nix
  13.  *    :Language.    Modula-2
  14.  *    :Translator.    M2Amiga A-L V4.2d
  15.  *    :Imports.    GadToolsBox, NoFrag  by Jaan van den Baard
  16.  *    :Imports.    InOut, NewArgSupport by Reiner Nix
  17.  *    :History.    this programm is a direct descendend from
  18.  *    :History.     OG (Oberon Generator) 37.11 by Thomas Igracki, Kai Bolay
  19.  *    :History.    GenModula 1.10 (23.Aug.93)    ;M2Amiga 4.0d
  20.  *    :History.    GenModula 1.12 (28.Sep.93)    ;M2Amiga 4.2d
  21.  *
  22.  * -------------------------------------------------------------------------
  23.  *)
  24.  
  25. FROM    SYSTEM            IMPORT    ADDRESS,
  26.                     ADR, CAST;
  27. FROM    String            IMPORT    Length, FirstPos,
  28.                     Copy, Concat;
  29. FROM    Conversions        IMPORT    ValToStr;
  30. FROM    FileMessage        IMPORT    StrPtr;
  31. FROM    ExecD            IMPORT    ListPtr, NodePtr;
  32. FROM    IntuitionD        IMPORT    WaTags, GaTags, StringaTags,
  33.                     LayoutaTags, PgaTags,
  34.                     ActivationFlags, ActivationFlagSet,
  35.                     PropInfoFlags, PropInfoFlagSet;
  36. FROM    GadToolsD        IMPORT    genericKind, buttonKind, checkboxKind,
  37.                     integerKind, listviewKind, mxKind, numberKind,
  38.                     cycleKind, paletteKind, scrollerKind,
  39.                     sliderKind, stringKind, textKind, numKinds,
  40.                     GtTags,
  41.                     NewGadgetFlags, NewGadgetFlagSet;
  42. FROM    UtilityD        IMPORT    Tag,
  43.                     tagEnd,
  44.                     TagItem, TagItemPtr;
  45. FROM    UtilityL        IMPORT    GetTagData;
  46. FROM    FileOut            IMPORT    Write, WriteString, WriteLn,
  47.                     WriteCard, WriteInt, WriteHex;
  48. FROM    GadToolsBox        IMPORT    maxWindowName,
  49.                     maxGadgetLabel, maxFontName,
  50.                     GadgetFlags, GadgetFlagSet,
  51.                     GuiFlags, GuiFlagSet,
  52.                     GenCFlags,
  53.                     GTConfigFlags, WindowTagFlags,
  54.                     ExtNewGadgetPtr, ProjectWindowPtr,
  55.                     TagInArray, CountNodes;
  56. FROM    GeneratorIO        IMPORT    dfile, mfile, args,
  57.                     Gui, MainConfig, CConfig, Projects,
  58.                     WriteFill, SeekBack, WriteText;
  59.  
  60.  
  61. CONST    reservedKind        =10;
  62.  
  63. TYPE    LabelArray        =ARRAY CARDINAL OF StrPtr;
  64.       LabelPtr        =POINTER TO LabelArray;
  65.  
  66.  
  67.  
  68.  
  69. PROCEDURE WritePlaceFlags        (    flags        :NewGadgetFlagSet);
  70.  
  71. BEGIN
  72. IF flags = NewGadgetFlagSet {} THEN
  73.   WriteString (mfile, "NewGadgetFlagSet {}")
  74.  
  75. ELSE
  76.   WriteString (mfile, "NewGadgetFlagSet {");
  77.  
  78.   IF    placetextLeft IN flags THEN
  79.     WriteString (mfile, "placetextLeft, ")
  80.   ELSIF placetextRight IN flags THEN
  81.     WriteString (mfile, "placetextRight, ")
  82.   ELSIF placetextAbove IN flags THEN
  83.     WriteString (mfile, "placetextAbove, ")
  84.   ELSIF placetextBelow IN flags THEN
  85.     WriteString (mfile, "placetextBelow, ")
  86.   ELSIF placetextIn IN flags THEN
  87.     WriteString (mfile, "placetextIn, ")
  88.     END;
  89.  
  90.   IF ngHighlabel IN flags THEN
  91.     WriteString (mfile, "ngHighlabel, ")
  92.     END;
  93.  
  94.   SeekBack (mfile, 2);
  95.   WriteString (mfile, "}")
  96.   END
  97. END WritePlaceFlags;
  98.  
  99.  
  100.  
  101. PROCEDURE WriteGadgetConsts        (    pw            :ProjectWindowPtr);
  102.  
  103.  
  104.   PROCEDURE WriteGadgetIDs        (    pw            :ProjectWindowPtr);
  105.  
  106.   VAR    eng            :ExtNewGadgetPtr;
  107.       id            :CARDINAL;
  108.       offset            :INTEGER;
  109.  
  110.   BEGIN
  111.   IF pw^.gadgets.head^.succ # NIL THEN
  112.     offset := Length (pw^.name) + 8;
  113.     id := 1;
  114.  
  115.     eng := pw^.gadgets.head;
  116.     WHILE eng^.succ # NIL DO
  117.       WriteString (dfile, "\t");
  118.       WriteString (dfile, pw^.name);
  119.       WriteString (dfile, "Gadget");
  120.       WriteString (dfile, eng^.gadgetLabel);
  121.       WriteString (dfile, "ID");
  122.       WriteFill   (dfile, eng^.gadgetLabel, offset);
  123.       WriteString (dfile, "=");
  124.       WriteCard   (dfile, id, 3);
  125.       Write       (dfile, ";");
  126.       WriteLn (dfile);
  127.  
  128.       eng := eng^.succ;
  129.       INC (id)
  130.       END;
  131.  
  132.     WriteLn (dfile)
  133.     END
  134.   END WriteGadgetIDs;
  135.  
  136.  
  137. (* WriteGadgetConsts *)
  138. BEGIN
  139. WriteGadgetIDs (pw)
  140. END WriteGadgetConsts;
  141.  
  142.  
  143.  
  144. PROCEDURE WriteGadgetDefs        (    pw            :ProjectWindowPtr);
  145.  
  146.  
  147.   PROCEDURE WriteNewGadgetsDef        (    pw            :ProjectWindowPtr);
  148.  
  149.   VAR    numGadgets        :CARDINAL;
  150.       eng            :ExtNewGadgetPtr;
  151.  
  152.   BEGIN
  153.   numGadgets := CountNodes (ADR (pw^.gadgets));
  154.  
  155.   IF 0 < numGadgets THEN
  156.     WriteString (dfile, "\t");
  157.     WriteString (dfile, pw^.name);
  158.     WriteString (dfile, "GadgetList");
  159.     WriteFill   (dfile, pw^.name, 10);
  160.     WriteString (dfile, ":GadgetPtr;");
  161.     WriteLn (dfile);
  162.  
  163.     WriteString (dfile, "\t");
  164.     WriteString (dfile, pw^.name);
  165.     WriteString (dfile, "Gadgets");
  166.     WriteFill   (dfile, pw^.name, 7);
  167.     WriteString (dfile, ":ARRAY [1..");
  168.     WriteCard   (dfile, numGadgets, 2);
  169.     WriteString (dfile, "] OF GadgetPtr;");
  170.     WriteLn (dfile);
  171.  
  172.     WriteString (mfile, "\t");
  173.     WriteString (mfile, pw^.name);
  174.     WriteString (mfile, "NewGadgets");
  175.     WriteFill   (mfile, pw^.name, 10);
  176.     WriteString (mfile, ":ARRAY [1..");
  177.     WriteCard   (mfile, numGadgets, 2);
  178.     WriteString (mfile, "] OF NewGadget;");
  179.     WriteLn (mfile)
  180.     END
  181.   END WriteNewGadgetsDef;
  182.  
  183.  
  184.  
  185.   PROCEDURE WriteGadgetLabelDefs    (    pw            :ProjectWindowPtr);
  186.  
  187.   VAR    eng            :ExtNewGadgetPtr;
  188.       labels            :LabelPtr;
  189.       number            :CARDINAL;
  190.       offset            :INTEGER;
  191.  
  192.   BEGIN
  193.   offset := Length (pw^.name) + 12;
  194.  
  195.   eng := pw^.gadgets.head;
  196.   WHILE eng^.succ # NIL DO
  197.     IF (eng^.kind = cycleKind) OR (eng^.kind = mxKind) THEN
  198.       IF eng^.kind = cycleKind THEN
  199.         labels := LabelPtr (GetTagData (Tag (gtcyLabels), NIL, eng^.tags))
  200.       ELSE
  201.         labels := LabelPtr (GetTagData (Tag (gtmxLabels), NIL, eng^.tags))
  202.         END;
  203.  
  204.       number := 0;
  205.       WHILE labels^[number] # NIL DO
  206.         INC (number)
  207.         END;
  208.  
  209.       WriteString (mfile, "\t");
  210.       WriteString (mfile, pw^.name);
  211.       WriteString (mfile, "Gadget");
  212.       WriteString (mfile, eng^.gadgetLabel);
  213.       WriteString (mfile, "Labels");
  214.       WriteFill   (mfile, eng^.gadgetLabel, offset);
  215.       WriteString (mfile, ":ARRAY [0..");
  216.       WriteCard   (mfile, number, 2);
  217.       WriteString (mfile, "] OF StrPtr;");
  218.       WriteLn (mfile);
  219.       END;
  220.  
  221.     eng := eng^.succ
  222.     END
  223.   END WriteGadgetLabelDefs;
  224.  
  225.  
  226.  
  227.   PROCEDURE WriteGadgetListDefs        (    pw            :ProjectWindowPtr);
  228.  
  229.   VAR    eng            :ExtNewGadgetPtr;
  230.       list            :ListPtr;
  231.       number            :CARDINAL;
  232.       offset            :INTEGER;
  233.  
  234.   BEGIN
  235.   offset := Length (pw^.name);
  236.  
  237.   eng := pw^.gadgets.head;
  238.   WHILE eng^.succ # NIL DO
  239.     IF eng^.kind = listviewKind THEN
  240.       list := ListPtr (GetTagData (Tag (gtlvLabels), NIL, eng^.tags));
  241.  
  242.       IF list # NIL THEN
  243.         WriteString (mfile, "\t");
  244.         WriteString (mfile, pw^.name);
  245.         WriteString (mfile, "Gadget");
  246.         WriteString (mfile, eng^.gadgetLabel);
  247.         WriteString (mfile, "List");
  248.         WriteFill   (mfile, eng^.gadgetLabel, offset+10);
  249.         WriteString (mfile, ":List;");
  250.         WriteLn (mfile);
  251.  
  252.         IF list^.head^.succ # NIL THEN
  253.           WriteString (mfile, "\t");
  254.           WriteString (mfile, pw^.name);
  255.           WriteString (mfile, "Gadget");
  256.           WriteString (mfile, eng^.gadgetLabel);
  257.           WriteString (mfile, "Nodes");
  258.           WriteFill   (mfile, eng^.gadgetLabel, offset+11);
  259.           WriteString (mfile, ":ARRAY [1..");
  260.           WriteCard   (mfile, CountNodes (list), 2);
  261.           WriteString (mfile, "] OF Node;");
  262.           WriteLn (mfile)
  263.           END
  264.         END
  265.       END;
  266.  
  267.     eng := eng^.succ
  268.     END
  269.   END WriteGadgetListDefs;
  270.  
  271.  
  272.  
  273. (* WriteGadgetDefs *)
  274. BEGIN
  275. WriteNewGadgetsDef   (pw);
  276. WriteGadgetLabelDefs (pw);
  277. WriteGadgetListDefs  (pw)
  278. END WriteGadgetDefs;
  279.  
  280.  
  281.  
  282. PROCEDURE WriteGadgetProcs        (    pw            :ProjectWindowPtr);
  283.  
  284.  
  285.   PROCEDURE WriteGadgetInit        (    pw            :ProjectWindowPtr);
  286.  
  287.   VAR    eng            :ExtNewGadgetPtr;
  288.       numGadget        :CARDINAL;
  289.  
  290.  
  291.  
  292.     PROCEDURE WriteGadgetLabelInit    (    eng        :ExtNewGadgetPtr;
  293.                              projectName    :ARRAY OF CHAR);
  294.  
  295.     VAR    labels            :LabelPtr;
  296.         number            :CARDINAL;
  297.  
  298.     BEGIN
  299.     IF eng^.kind = cycleKind THEN
  300.       labels := LabelPtr (GetTagData (Tag (gtcyLabels), NIL, eng^.tags))
  301.     ELSE
  302.       labels := LabelPtr (GetTagData (Tag (gtmxLabels), NIL, eng^.tags))
  303.       END;
  304.  
  305.     WriteString (mfile, "dummy := TAG (");
  306.     WriteString (mfile, projectName);
  307.     WriteString (mfile, "Gadget");
  308.     WriteString (mfile, eng^.gadgetLabel);
  309.     WriteString (mfile, "Labels,");
  310.     WriteLn (mfile);
  311.  
  312.     number := 0;
  313.     WHILE labels^[number] # NIL DO
  314.       WriteString (mfile, "              ADR ('");
  315.       WriteText   (mfile, labels^[number]^);
  316.       WriteString (mfile, "'),");
  317.       WriteLn (mfile);
  318.  
  319.       INC (number)
  320.       END;
  321.  
  322.     WriteString (mfile, "              NIL);");
  323.     WriteLn (mfile);
  324.     WriteLn (mfile)
  325.     END WriteGadgetLabelInit;
  326.  
  327.  
  328.  
  329.     PROCEDURE WriteGadgetListInit    (    eng        :ExtNewGadgetPtr;
  330.                              projectName    :ARRAY OF CHAR);
  331.  
  332.     VAR    varListName        :ARRAY [0..maxWindowName+maxGadgetLabel+10] OF CHAR;
  333.         varNodeName        :ARRAY [0..maxWindowName+maxGadgetLabel+11] OF CHAR;
  334.         list            :ListPtr;
  335.         node            :NodePtr;
  336.         i, nodeNumber        :CARDINAL;
  337.  
  338.  
  339.     BEGIN
  340.     Copy   (varListName, projectName);
  341.     Concat (varListName, "Gadget");
  342.     Concat (varListName, eng^.gadgetLabel);
  343.     Concat (varListName, "List");
  344.  
  345.     Copy   (varNodeName, projectName);
  346.     Concat (varNodeName, "Gadget");
  347.     Concat (varNodeName, eng^.gadgetLabel);
  348.     Concat (varNodeName, "Nodes");
  349.  
  350.  
  351.     list := ListPtr (GetTagData (Tag (gtlvLabels), NIL, eng^.tags));
  352.  
  353.     WriteString (mfile, "WITH ");
  354.     WriteString (mfile, varListName);
  355.     WriteString (mfile, " DO");
  356.     WriteLn (mfile);
  357.  
  358.     node := list^.head;
  359.     IF node^.succ = NIL THEN
  360.       WriteString (mfile, "  head     := ADR (");
  361.       WriteString (mfile, varListName);
  362.       WriteString (mfile, ".tail);");
  363.       WriteLn (mfile);
  364.  
  365.       WriteString (mfile, "  tail     := NIL;");
  366.       WriteLn (mfile);
  367.  
  368.       WriteString (mfile, "  tailPred := ADR (");
  369.       WriteString (mfile, varListName);
  370.       WriteString (mfile, ".head);");
  371.       WriteLn (mfile);
  372.  
  373.     ELSE
  374.       nodeNumber := CountNodes (list);
  375.  
  376.       WriteString (mfile, "  head     := ADR (");
  377.       WriteString (mfile, varNodeName);
  378.       WriteString (mfile, "[ 1]);");
  379.       WriteLn (mfile);
  380.  
  381.       WriteString (mfile, "  tail     := NIL;");
  382.       WriteLn (mfile);
  383.  
  384.       WriteString (mfile, "  tailPred := ADR (");
  385.       WriteString (mfile, varNodeName);
  386.       Write       (mfile, "[");
  387.       WriteCard   (mfile, nodeNumber, 2);
  388.       WriteString (mfile, "]);");
  389.       WriteLn (mfile);
  390.       END;
  391.  
  392.     WriteString (mfile, "  type     := unknown");
  393.     WriteLn (mfile);
  394.  
  395.     WriteString (mfile, "  END;");
  396.     WriteLn (mfile);
  397.     WriteLn (mfile);
  398.  
  399.  
  400.     FOR i := 1 TO nodeNumber DO
  401.       WriteString (mfile, "WITH ");
  402.       WriteString (mfile, varNodeName);
  403.       Write       (mfile, "[");
  404.       WriteCard   (mfile, i, 2);
  405.       WriteString (mfile, "] DO");
  406.       WriteLn (mfile);
  407.  
  408.       WriteString (mfile, "  succ := ADR (");
  409.       IF i = nodeNumber THEN
  410.         WriteString (mfile, varListName);
  411.         WriteString (mfile, ".tail);")
  412.       ELSE
  413.         WriteString (mfile, varNodeName);
  414.         Write       (mfile, "[");
  415.         WriteCard   (mfile, i+1, 2);
  416.         WriteString (mfile, "]);")
  417.         END;
  418.       WriteLn (mfile);
  419.  
  420.       WriteString (mfile, "  pred := ADR (");
  421.       IF i = 1 THEN
  422.         WriteString (mfile, varListName);
  423.         WriteString (mfile, ".head);")
  424.       ELSE
  425.         WriteString (mfile, varNodeName);
  426.         Write       (mfile, "[");
  427.         WriteCard   (mfile, i-1, 2);
  428.         WriteString (mfile, "]);")
  429.         END;
  430.       WriteLn (mfile);
  431.  
  432.       WriteString (mfile, "  type := unknown;");
  433.       WriteLn (mfile);
  434.  
  435.       WriteString (mfile, "  pri  := 0;");
  436.       WriteLn (mfile);
  437.  
  438.       WriteString (mfile, "  name := ADR ('");
  439.       WriteText   (mfile, StrPtr (node^.name)^);
  440.       WriteString (mfile, "');");
  441.       WriteLn (mfile);
  442.  
  443.       WriteString (mfile, "  END;");
  444.       WriteLn (mfile);
  445.  
  446.       node := node^.succ
  447.       END;
  448.     WriteLn (mfile)
  449.     END WriteGadgetListInit;
  450.  
  451.  
  452.  
  453.     PROCEDURE WriteNewGadgetInit    (    eng        :ExtNewGadgetPtr;
  454.                              pw            :ProjectWindowPtr;
  455.                              numGadget        :CARDINAL);
  456.  
  457.     BEGIN
  458.     WriteString (mfile, "WITH ");
  459.     WriteString (mfile, pw^.name);
  460.     WriteString (mfile, "NewGadgets[");
  461.     WriteCard   (mfile, numGadget, 2);
  462.     WriteString (mfile, "] DO");
  463.     WriteLn (mfile);
  464.  
  465.  
  466.     WriteString (mfile, "  leftEdge   := ");
  467.     WriteInt    (mfile, eng^.newGadget.leftEdge - INTEGER (pw^.leftBorder), 3);
  468.     Write       (mfile, ";");
  469.     WriteLn (mfile);
  470.  
  471.     WriteString (mfile, "  topEdge    := ");
  472.     WriteInt    (mfile, eng^.newGadget.topEdge - INTEGER (pw^.topBorder), 3);
  473.     Write       (mfile, ";");
  474.     WriteLn (mfile);
  475.  
  476.     WriteString (mfile, "  width      := ");
  477.     WriteInt    (mfile, eng^.newGadget.width, 3);
  478.     Write       (mfile, ";");
  479.     WriteLn (mfile);
  480.  
  481.     WriteString (mfile, "  height     := ");
  482.     WriteInt    (mfile, eng^.newGadget.height, 3);
  483.     Write       (mfile, ";");
  484.     WriteLn (mfile);
  485.  
  486.     WriteString (mfile, "  gadgetText := ");
  487.     IF 0 < Length (eng^.gadgetText) THEN
  488.       WriteString (mfile, "ADR ('");
  489.       WriteText   (mfile, eng^.gadgetText);
  490.       WriteString (mfile, "');")
  491.     ELSE
  492.       WriteString (mfile, "NIL;");
  493.       END;
  494.     WriteLn (mfile);
  495.  
  496.     WriteString (mfile, "  textAttr   := NIL;");
  497.     WriteLn (mfile);
  498.  
  499.     WriteString (mfile, "  gadgetID   := ");
  500.     WriteString (mfile, pw^.name);
  501.     WriteString (mfile, "Gadget");
  502.     WriteString (mfile, eng^.gadgetLabel);
  503.     WriteString (mfile, "ID;");
  504.     WriteLn (mfile);
  505.  
  506.     WriteString (mfile, "  flags      := ");
  507.     WritePlaceFlags (eng^.newGadget.flags);
  508.     Write       (mfile, ";");
  509.     WriteLn (mfile);
  510.  
  511.     WriteString (mfile, "  visualInfo := NIL;");
  512.     WriteLn (mfile);
  513.  
  514.     WriteString (mfile, "  userData   := NIL;");
  515.     WriteLn (mfile);
  516.  
  517.  
  518.     WriteString (mfile, "  END;");
  519.     WriteLn (mfile)
  520.     END WriteNewGadgetInit;
  521.  
  522.  
  523.  
  524.   (* WriteGadgetInit *)
  525.   BEGIN
  526.   eng := pw^.gadgets.head;
  527.   IF eng^.succ # NIL THEN
  528.     WriteLn (mfile);
  529.     WriteString (mfile, "PROCEDURE Init");
  530.     WriteString (mfile, pw^.name);
  531.     WriteString (mfile, "Gadgets;");
  532.     WriteLn (mfile);
  533.     WriteLn (mfile);
  534.  
  535.     WriteString (mfile, "VAR");
  536.     Write       (mfile, "\t");
  537.  
  538.     WriteString (mfile, "dummy");
  539.     WriteFill   (mfile, "", 5);
  540.     WriteString (mfile, ":ADDRESS;");
  541.     WriteLn (mfile);
  542.     WriteLn (mfile);
  543.  
  544.  
  545.     WriteString (mfile, "BEGIN");
  546.     WriteLn (mfile);
  547.  
  548.     numGadget := 1;
  549.     WHILE eng^.succ # NIL DO
  550.       WriteString (mfile, "(* ");
  551.       WriteString (mfile, pw^.name);
  552.       WriteString (mfile, "Gadget");
  553.       WriteString (mfile, eng^.gadgetLabel);
  554.       WriteString (mfile, " *)");
  555.       WriteLn (mfile);
  556.  
  557.       CASE eng^.kind OF
  558.       | cycleKind:
  559.         IF LabelPtr(GetTagData (Tag (gtcyLabels), NIL, eng^.tags)) # NIL THEN
  560.           WriteGadgetLabelInit (eng, pw^.name)
  561.           END;
  562.  
  563.       | mxKind:
  564.         IF LabelPtr (GetTagData (Tag (gtmxLabels), NIL, eng^.tags)) # NIL THEN
  565.           WriteGadgetLabelInit (eng, pw^.name)
  566.           END;
  567.  
  568.       | listviewKind:
  569.         IF LabelPtr (GetTagData (Tag (gtlvLabels), NIL, eng^.tags)) # NIL THEN
  570.           WriteGadgetListInit (eng, pw^.name)
  571.           END;
  572.  
  573.       ELSE
  574.         END;
  575.  
  576.       WriteNewGadgetInit (eng, pw, numGadget);
  577.  
  578.       eng := eng^.succ;
  579.       INC (numGadget);
  580.  
  581.       IF eng^.succ # NIL THEN
  582.         WriteLn (mfile);
  583.         WriteLn (mfile)
  584.         END
  585.       END;
  586.  
  587.     WriteString (mfile, "END Init");
  588.     WriteString (mfile, pw^.name);
  589.     WriteString (mfile, "Gadgets;");
  590.     WriteLn (mfile);
  591.     WriteLn (mfile)
  592.     END
  593.   END WriteGadgetInit;
  594.  
  595.  
  596.  
  597.   PROCEDURE WriteGadgetCreate        (    pw            :ProjectWindowPtr);
  598.  
  599.  
  600.     PROCEDURE WriteCreateGadBody    (    pw            :ProjectWindowPtr);
  601.  
  602.     VAR    ok        :BOOLEAN;
  603.         i        :INTEGER;
  604.         numGadget,
  605.       btop, bleft    :CARDINAL;
  606.         eng        :ExtNewGadgetPtr;
  607.         fontName    :ARRAY [0..maxFontName] OF CHAR;
  608.         fontSize    :ARRAY [0..5] OF CHAR;
  609.  
  610.  
  611.  
  612.       PROCEDURE WriteGadgetTags        (    eng        :ExtNewGadgetPtr;
  613.                                projectName    :ARRAY OF CHAR);
  614.  
  615.       VAR    activation    :ActivationFlagSet;
  616.               i        :CARDINAL;
  617.               list        :ListPtr;
  618.  
  619.  
  620.  
  621.         PROCEDURE WriteCheckboxTags;
  622.  
  623.         BEGIN
  624.         IF TagInArray (Tag (gtcbChecked), eng^.tags) THEN
  625.           WriteString (mfile, "\t\t");
  626.           WriteString (mfile, "gtcbChecked,");
  627.           WriteFill   (mfile, "", 12);
  628.           WriteString (mfile, "TRUE,");
  629.           WriteLn (mfile)
  630.           END
  631.         END WriteCheckboxTags;
  632.  
  633.  
  634.         PROCEDURE WriteCycleTags;
  635.  
  636.         BEGIN
  637.         WriteString (mfile, "\t\t");
  638.         WriteString (mfile, "gtcyLabels,");
  639.         WriteFill   (mfile, "", 11);
  640.         WriteString (mfile, "ADR (");
  641.         WriteString (mfile, projectName);
  642.         WriteString (mfile, "Gadget");
  643.         WriteString (mfile, eng^.gadgetLabel);
  644.         WriteString (mfile, "Labels),");
  645.         WriteLn (mfile);
  646.  
  647.         IF TagInArray (Tag (gtcyActive), eng^.tags) THEN
  648.           WriteString (mfile, "\t\t");
  649.           WriteString (mfile, "gtcyActive,");
  650.           WriteFill   (mfile, "", 11);
  651.           WriteCard   (mfile, GetTagData (Tag (gtcyActive), 0, eng^.tags), 2);
  652.           Write       (mfile, ",");
  653.           WriteLn (mfile)
  654.           END
  655.         END WriteCycleTags;
  656.  
  657.  
  658.         PROCEDURE WriteIntegerTags;
  659.  
  660.         BEGIN
  661.         IF TagInArray (Tag (gaTabCycle), eng^.tags) THEN
  662.           WriteString (mfile, "\t\t");
  663.           WriteString (mfile, "gaTabCycle,");
  664.           WriteFill   (mfile, "", 11);
  665.           WriteString (mfile, "FALSE,");
  666.           WriteLn (mfile)
  667.           END;
  668.  
  669.         IF TagInArray (Tag (stringaExitHelp), eng^.tags) THEN
  670.           WriteString (mfile, "\t\t");
  671.           WriteString (mfile, "stringaExitHelp,");
  672.           WriteFill   (mfile, "", 16);
  673.           WriteString (mfile, "TRUE,");
  674.           WriteLn (mfile)
  675.           END;
  676.  
  677.         WriteString (mfile, "\t\t");
  678.         WriteString (mfile, "gtinNumber,");
  679.         WriteFill   (mfile, "", 11);
  680.         WriteInt    (mfile, GetTagData (Tag (gtinNumber), 0, eng^.tags), 2);
  681.         Write       (mfile, ",");
  682.         WriteLn (mfile);
  683.  
  684.         WriteString (mfile, "\t\t");
  685.         WriteString (mfile, "gtinMaxChars,");
  686.         WriteFill   (mfile, "", 13);
  687.         WriteCard   (mfile, GetTagData (Tag (gtinMaxChars), 0, eng^.tags), 2);
  688.         Write       (mfile, ",");
  689.         WriteLn (mfile);
  690.  
  691.         i := GetTagData (Tag (stringaJustification), 0, eng^.tags);
  692.         activation := CAST (ActivationFlagSet, i);
  693.         IF activation # ActivationFlagSet {} THEN
  694.           WriteString (mfile, "\t\t");
  695.           WriteString (mfile, "stringaJustification,");
  696.           WriteFill   (mfile, "", 21);
  697.           IF stringCenter IN activation THEN
  698.             WriteString (mfile, "ActivationFlagSet {stringCenter},")
  699.           ELSE
  700.             WriteString (mfile, "ActivationFlagSet {stringRight},")
  701.             END;
  702.           WriteLn (mfile)
  703.           END
  704.         END WriteIntegerTags;
  705.  
  706.  
  707.         PROCEDURE WriteListviewTags;
  708.  
  709.  
  710.         BEGIN
  711.         list := ListPtr (GetTagData (Tag (gtlvLabels), NIL, eng^.tags));
  712.         IF (list # NIL) AND (list^.head^.succ # NIL) THEN
  713.           WriteString (mfile, "\t\t");
  714.           WriteString (mfile, "gtlvLabels,");
  715.           WriteFill   (mfile, "", 11);
  716.           WriteString (mfile, "ADR (");
  717.           WriteString (mfile, projectName);
  718.           WriteString (mfile, "Gadget");
  719.           WriteString (mfile, eng^.gadgetLabel);
  720.           WriteString (mfile, "List),");
  721.           WriteLn (mfile)
  722.           END;
  723.  
  724.         IF NeedLock IN eng^.flags THEN
  725.           WriteString (mfile, "\t\t");
  726.           WriteString (mfile, "gtlvShowSelected,");
  727.           WriteFill   (mfile, "", 17);
  728.           WriteString (mfile, "gad,");            (* the previous gadget MUST be the    *)
  729.           WriteLn (mfile)                (* string gadget which should attached!    *)
  730.         ELSIF TagInArray (Tag (gtlvShowSelected), eng^.tags) THEN
  731.           WriteString (mfile, "\t\t");
  732.           WriteString (mfile, "gtlvShowSelected,");
  733.           WriteFill   (mfile, "", 17);
  734.           WriteString (mfile, "NIL,");
  735.           WriteLn (mfile)
  736.           END;
  737.  
  738.         IF TagInArray (Tag (gtlvScrollWidth), eng^.tags) THEN
  739.           WriteString (mfile, "\t\t");
  740.           WriteString (mfile, "gtlvScrollWidth,");
  741.           WriteFill   (mfile, "", 17);
  742.           WriteInt    (mfile, GetTagData (Tag (gtlvScrollWidth), 0, eng^.tags), 3);
  743.           Write       (mfile, ",");
  744.           WriteLn (mfile)
  745.           END;
  746.  
  747.         IF TagInArray (Tag (gtlvReadOnly), eng^.tags) THEN
  748.           WriteString (mfile, "\t\t");
  749.           WriteString (mfile, "gtlvReadOnly,");
  750.           WriteFill   (mfile, "", 13);
  751.           WriteString (mfile, "TRUE,");
  752.           WriteLn (mfile)
  753.           END;
  754.  
  755.         IF TagInArray (Tag (layoutaSpacing), eng^.tags) THEN
  756.           WriteString (mfile, "\t\t");
  757.           WriteString (mfile, "layoutaSpacing,");
  758.           WriteFill   (mfile, "", 15);
  759.           WriteInt    (mfile, GetTagData (Tag (layoutaSpacing), 0, eng^.tags), 3);
  760.           Write       (mfile, ",");
  761.           WriteLn (mfile)
  762.           END
  763.         END WriteListviewTags;
  764.  
  765.  
  766.         PROCEDURE WriteMxTags;
  767.  
  768.         BEGIN
  769.         WriteString (mfile, "\t\t");
  770.         WriteString (mfile, "gtmxLabels,");
  771.         WriteFill   (mfile, "", 11);
  772.         WriteString (mfile, "ADR (");
  773.         WriteString (mfile, projectName);
  774.         WriteString (mfile, "Gadget");
  775.         WriteString (mfile, eng^.gadgetLabel);
  776.         WriteString (mfile, "Labels),");
  777.         WriteLn (mfile);
  778.  
  779.         IF TagInArray (Tag (gtmxSpacing), eng^.tags) THEN
  780.           WriteString (mfile, "\t\t");
  781.           WriteString (mfile, "gtmxSpacing,");
  782.           WriteFill   (mfile, "", 12);
  783.           WriteInt    (mfile, GetTagData (Tag (gtmxSpacing), 0, eng^.tags), 3);
  784.           Write       (mfile, ",");
  785.           WriteLn (mfile)
  786.           END;
  787.  
  788.         IF TagInArray (Tag (gtmxActive), eng^.tags) THEN
  789.           WriteString (mfile, "\t\t");
  790.           WriteString (mfile, "gtmxActive,");
  791.           WriteFill   (mfile, "", 11);
  792.           WriteCard   (mfile, GetTagData (Tag (gtmxActive), 0, eng^.tags), 2);
  793.           Write       (mfile, ",");
  794.           WriteLn (mfile)
  795.           END
  796.         END WriteMxTags;
  797.  
  798.  
  799.         PROCEDURE WritePaletteTags;
  800.  
  801.         BEGIN
  802.         WriteString (mfile, "\t\t");
  803.         WriteString (mfile, "gtpaDepth,");
  804.         WriteFill   (mfile, "", 10);
  805.         WriteCard   (mfile, GetTagData (Tag (gtpaDepth), 1, eng^.tags), 2);
  806.         Write       (mfile, ",");
  807.         WriteLn (mfile);
  808.  
  809.         IF TagInArray (Tag (gtpaIndicatorWidth), eng^.tags) THEN
  810.           WriteString (mfile, "\t\t");
  811.           WriteString (mfile, "gtpaIndicatorWidth,");
  812.           WriteFill   (mfile, "", 19);
  813.           WriteCard   (mfile, GetTagData (Tag (gtpaIndicatorWidth), 5, eng^.tags), 2);
  814.           Write       (mfile, ",");
  815.           WriteLn (mfile)
  816.           END;
  817.  
  818.         IF TagInArray (Tag (gtpaIndicatorHeight), eng^.tags) THEN
  819.           WriteString (mfile, "\t\t");
  820.           WriteString (mfile, "gtpaIndicatorHeight,");
  821.           WriteFill   (mfile, "", 20);
  822.           WriteCard   (mfile, GetTagData (Tag (gtpaIndicatorHeight), 5, eng^.tags), 2);
  823.           Write       (mfile, ",");
  824.           WriteLn (mfile)
  825.           END;
  826.  
  827.         IF TagInArray (Tag (gtpaColor), eng^.tags) THEN
  828.           WriteString (mfile, "\t\t");
  829.           WriteString (mfile, "gtpaColor,");
  830.           WriteFill   (mfile, "", 10);
  831.           WriteCard   (mfile, GetTagData (Tag (gtpaColor), 1, eng^.tags), 2);
  832.           Write       (mfile, ",");
  833.           WriteLn (mfile)
  834.           END;
  835.  
  836.         IF TagInArray (Tag (gtpaColorOffset), eng^.tags) THEN
  837.           WriteString (mfile, "\t\t");
  838.           WriteString (mfile, "gtpaColorOffset,");
  839.           WriteFill   (mfile, "", 16);
  840.           WriteCard   (mfile, GetTagData (Tag (gtpaColorOffset), 0, eng^.tags), 2);
  841.           Write       (mfile, ",");
  842.           WriteLn (mfile)
  843.           END
  844.         END WritePaletteTags;
  845.  
  846.  
  847.         PROCEDURE WriteScrollerTags;
  848.  
  849.         BEGIN
  850.         IF TagInArray (Tag (gtscTop), eng^.tags) THEN
  851.           WriteString (mfile, "\t\t");
  852.           WriteString (mfile, "gtscTop,");
  853.           WriteFill   (mfile, "", 8);
  854.           WriteCard   (mfile, GetTagData (Tag (gtscTop), 0, eng^.tags), 2);
  855.           Write       (mfile, ",");
  856.           WriteLn (mfile)
  857.           END;
  858.  
  859.         IF TagInArray (Tag (gtscTotal), eng^.tags) THEN
  860.           WriteString (mfile, "\t\t");
  861.           WriteString (mfile, "gtscTotal,");
  862.           WriteFill   (mfile, "", 10);
  863.           WriteCard   (mfile, GetTagData (Tag (gtscTotal), 0, eng^.tags), 2);
  864.           Write       (mfile, ",");
  865.           WriteLn (mfile)
  866.           END;
  867.  
  868.         IF TagInArray (Tag (gtscVisible), eng^.tags) THEN
  869.           WriteString (mfile, "\t\t");
  870.           WriteString (mfile, "gtscVisible,");
  871.           WriteFill   (mfile, "", 12);
  872.           WriteCard   (mfile, GetTagData (Tag (gtscVisible), 0, eng^.tags), 2);
  873.           Write       (mfile, ",");
  874.           WriteLn (mfile)
  875.           END;
  876.  
  877.         IF TagInArray (Tag (gtscArrows), eng^.tags) THEN
  878.           WriteString (mfile, "\t\t");
  879.           WriteString (mfile, "gtscArrows,");
  880.           WriteFill   (mfile, "", 11);
  881.           WriteCard   (mfile, GetTagData (Tag (gtscArrows), 0, eng^.tags), 2);
  882.           Write       (mfile, ",");
  883.           WriteLn (mfile)
  884.           END;
  885.  
  886.         IF TagInArray (Tag (pgaFreedom), eng^.tags) THEN
  887.           WriteString (mfile, "\t\t");
  888.           WriteString (mfile, "pgaFreedom,");
  889.           WriteFill   (mfile, "", 11);
  890.           WriteString (mfile, "freeVert,");
  891.           WriteLn (mfile)
  892.         ELSE
  893.           WriteString (mfile, "\t\t");
  894.           WriteString (mfile, "pgaFreedom,");
  895.           WriteFill   (mfile, "", 11);
  896.           WriteString (mfile, "freeHoriz,");
  897.           WriteLn (mfile)
  898.           END;
  899.  
  900.         IF TagInArray (Tag (gaImmediate), eng^.tags) THEN
  901.           WriteString (mfile, "\t\t");
  902.           WriteString (mfile, "gaImmediate,");
  903.           WriteFill   (mfile, "", 12);
  904.           WriteString (mfile, "TRUE,");
  905.           WriteLn (mfile)
  906.           END;
  907.  
  908.         IF TagInArray (Tag (gaRelVerify), eng^.tags) THEN
  909.           WriteString (mfile, "\t\t");
  910.           WriteString (mfile, "gaRelVerify,");
  911.           WriteFill   (mfile, "", 12);
  912.           WriteString (mfile, "TRUE,");
  913.           WriteLn (mfile)
  914.           END
  915.         END WriteScrollerTags;
  916.  
  917.  
  918.         PROCEDURE WriteSliderTags;
  919.  
  920.         BEGIN
  921.         IF TagInArray (Tag (gtslMin), eng^.tags) THEN
  922.           WriteString (mfile, "\t\t");
  923.           WriteString (mfile, "gtslMin,");
  924.           WriteFill   (mfile, "", 8);
  925.           WriteCard   (mfile, GetTagData (Tag (gtslMin), 0, eng^.tags), 2);
  926.           Write       (mfile, ",");
  927.           WriteLn (mfile)
  928.           END;
  929.  
  930.         IF TagInArray (Tag (gtslMax), eng^.tags) THEN
  931.           WriteString (mfile, "\t\t");
  932.           WriteString (mfile, "gtslMax,");
  933.           WriteFill   (mfile, "", 8);
  934.           WriteCard   (mfile, GetTagData (Tag (gtslMax), 0, eng^.tags), 2);
  935.           Write       (mfile, ",");
  936.           WriteLn (mfile)
  937.           END;
  938.  
  939.         IF TagInArray (Tag (gtslLevel), eng^.tags) THEN
  940.           WriteString (mfile, "\t\t");
  941.           WriteString (mfile, "gtslLevel,");
  942.           WriteFill   (mfile, "", 11);
  943.           WriteCard   (mfile, GetTagData (Tag (gtslLevel), 0, eng^.tags), 2);
  944.           Write       (mfile, ",");
  945.           WriteLn (mfile)
  946.           END;
  947.  
  948.         IF TagInArray (Tag (gtslLevelFormat), eng^.tags) THEN
  949.           WriteString (mfile, "\t\t");
  950.           WriteString (mfile, "gtslLevelFormat,");
  951.           WriteFill   (mfile, "", 17);
  952.           WriteString (mfile, "ADR ('");
  953.           WriteString (mfile, StrPtr (GetTagData (Tag (gtslLevelFormat), NIL, eng^.tags))^);
  954.           WriteString (mfile, "'),");
  955.           WriteLn (mfile)
  956.           END;
  957.  
  958.         IF TagInArray (Tag (gtslMaxLevelLen), eng^.tags) THEN
  959.           WriteString (mfile, "\t\t");
  960.           WriteString (mfile, "gtslMaxLevelLen,");
  961.           WriteFill   (mfile, "", 17);
  962.           WriteCard   (mfile, GetTagData (Tag (gtslMaxLevelLen), 0, eng^.tags), 2);
  963.           Write       (mfile, ",");
  964.           WriteLn (mfile)
  965.           END;
  966.  
  967.         IF TagInArray (Tag (gtslLevelPlace), eng^.tags) THEN
  968.           WriteString (mfile, "\t\t");
  969.           WriteString (mfile, "gtslLevelPlace,");
  970.           WriteFill   (mfile, "", 15);
  971.           WritePlaceFlags (CAST (NewGadgetFlagSet, GetTagData (Tag (gtslLevelPlace), 0, eng^.tags)));
  972.           Write       (mfile, ",");
  973.           WriteLn (mfile)
  974.           END;
  975.  
  976.         IF TagInArray (Tag (pgaFreedom), eng^.tags) THEN
  977.           WriteString (mfile, "\t\t");
  978.           WriteString (mfile, "pgaFreedom,");
  979.           WriteFill   (mfile, "", 11);
  980.           WriteString (mfile, "freeVert,");
  981.           WriteLn (mfile)
  982.         ELSE
  983.           WriteString (mfile, "\t\t");
  984.           WriteString (mfile, "pgaFreedom,");
  985.           WriteFill   (mfile, "", 11);
  986.           WriteString (mfile, "freeHoriz,");
  987.           WriteLn (mfile)
  988.           END;
  989.  
  990.         IF TagInArray (Tag (gaImmediate), eng^.tags) THEN
  991.           WriteString (mfile, "\t\t");
  992.           WriteString (mfile, "gaImmediate,");
  993.           WriteFill   (mfile, "", 12);
  994.           WriteString (mfile, "TRUE,");
  995.           WriteLn (mfile)
  996.           END;
  997.  
  998.         IF TagInArray (Tag (gaRelVerify), eng^.tags) THEN
  999.           WriteString (mfile, "\t\t");
  1000.           WriteString (mfile, "gaRelVerify,");
  1001.           WriteFill   (mfile, "", 12);
  1002.           WriteString (mfile, "TRUE,");
  1003.           WriteLn (mfile)
  1004.           END
  1005.         END WriteSliderTags;
  1006.  
  1007.  
  1008.         PROCEDURE WriteStringTags;
  1009.  
  1010.         BEGIN
  1011.         IF TagInArray (Tag (gaTabCycle), eng^.tags) THEN
  1012.           WriteString (mfile, "\t\t");
  1013.           WriteString (mfile, "gaTabCycle,");
  1014.           WriteFill   (mfile, "", 11);
  1015.           WriteString (mfile, "FALSE,");
  1016.           WriteLn (mfile)
  1017.           END;
  1018.  
  1019.         IF TagInArray (Tag (stringaExitHelp), eng^.tags) THEN
  1020.           WriteString (mfile, "\t\t");
  1021.           WriteString (mfile, "stringaExitHelp,");
  1022.           WriteFill   (mfile, "", 16);
  1023.           WriteString (mfile, "TRUE,");
  1024.           WriteLn (mfile)
  1025.           END;
  1026.  
  1027.         IF 0 < Length (eng^.gadgetText) THEN
  1028.           WriteString (mfile, "\t\t");
  1029.           WriteString (mfile, "gtstString,");
  1030.           WriteFill   (mfile, "", 11);
  1031.           WriteString (mfile, "ADR ('");
  1032.           WriteText   (mfile, eng^.gadgetText);
  1033.           WriteString (mfile, "'),");
  1034.           WriteLn (mfile)
  1035.           END;
  1036.  
  1037.         WriteString (mfile, "\t\t");
  1038.         WriteString (mfile, "gtstMaxChars,");
  1039.         WriteFill   (mfile, "", 13);
  1040.         WriteCard   (mfile, GetTagData (Tag (gtstMaxChars), 0, eng^.tags), 2);
  1041.         Write       (mfile, ",");
  1042.         WriteLn (mfile);
  1043.  
  1044.         i := GetTagData (Tag (stringaJustification), 0, eng^.tags);
  1045.         activation := CAST (ActivationFlagSet, i);
  1046.         IF activation # ActivationFlagSet {} THEN
  1047.           WriteString (mfile, "\t\t");
  1048.           WriteString (mfile, "stringaJustification,");
  1049.           WriteFill   (mfile, "", 21);
  1050.           IF stringCenter IN activation THEN
  1051.             WriteString (mfile, "ActivationFlagSet {stringCenter},")
  1052.           ELSE
  1053.             WriteString (mfile, "ActivationFlagSet {stringRight},")
  1054.             END;
  1055.           WriteLn (mfile)
  1056.           END
  1057.         END WriteStringTags;
  1058.  
  1059.  
  1060.         PROCEDURE WriteNumberTags;
  1061.  
  1062.         BEGIN
  1063.         IF TagInArray (Tag (gtnmNumber), eng^.tags) THEN
  1064.           WriteString (mfile, "\t\t");
  1065.           WriteString (mfile, "gtnmNumber,");
  1066.           WriteFill   (mfile, "", 11);
  1067.           WriteCard   (mfile, GetTagData (Tag (gtnmNumber), 0, eng^.tags), 2);
  1068.           Write       (mfile, ",");
  1069.           WriteLn (mfile)
  1070.           END;
  1071.  
  1072.         IF TagInArray (Tag (gtnmBorder), eng^.tags) THEN
  1073.           WriteString (mfile, "\t\t");
  1074.           WriteString (mfile, "gtnmBorder,");
  1075.           WriteFill   (mfile, "", 11);
  1076.           WriteString (mfile, "TRUE,");
  1077.           WriteLn (mfile)
  1078.           END
  1079.         END WriteNumberTags;
  1080.  
  1081.  
  1082.         PROCEDURE WriteTextTags;
  1083.  
  1084.         BEGIN
  1085.         IF 0 < Length (eng^.gadgetText) THEN
  1086.           WriteString (mfile, "\t\t");
  1087.           WriteString (mfile, "gttxText,");
  1088.           WriteFill   (mfile, "", 9);
  1089.           WriteString (mfile, "ADR ('");
  1090.           WriteText   (mfile, eng^.gadgetText);
  1091.           WriteString (mfile, "'),");
  1092.           WriteLn (mfile)
  1093.           END;
  1094.  
  1095.         IF TagInArray (Tag (gttxBorder), eng^.tags) THEN
  1096.           WriteString (mfile, "\t\t");
  1097.           WriteString (mfile, "gttxBorder,");
  1098.           WriteFill   (mfile, "", 11);
  1099.           WriteString (mfile, "TRUE,");
  1100.           WriteLn (mfile)
  1101.           END;
  1102.  
  1103.         IF TagInArray (Tag (gttxCopyText), eng^.tags) THEN
  1104.           WriteString (mfile, "\t\t");
  1105.           WriteString (mfile, "gttxCopyText,");
  1106.           WriteFill   (mfile, "", 13);
  1107.           WriteString (mfile, "TRUE,");
  1108.           WriteLn (mfile)
  1109.           END
  1110.         END WriteTextTags;
  1111.  
  1112.  
  1113.  
  1114.       (* WriteGadgetTags *)
  1115.       BEGIN
  1116.       WriteString (mfile, "gadgetTagPtr := TAG (");
  1117.       WriteString (mfile, "gadgetTags,");
  1118.       WriteLn (mfile);
  1119.  
  1120.       CASE eng^.kind OF
  1121.       | checkboxKind:    WriteCheckboxTags
  1122.       | cycleKind:    WriteCycleTags
  1123.       | integerKind:    WriteIntegerTags
  1124.       | listviewKind:    WriteListviewTags
  1125.       | mxKind:        WriteMxTags
  1126.       | paletteKind:    WritePaletteTags
  1127.       | scrollerKind:    WriteScrollerTags
  1128.       | sliderKind:    WriteSliderTags
  1129.       | stringKind:    WriteStringTags
  1130.       | numberKind:    WriteNumberTags
  1131.       | textKind:    WriteTextTags
  1132.       ELSE
  1133.         END;
  1134.  
  1135.       IF (eng^.kind # genericKind) AND
  1136.          (TagInArray (Tag (gtUnderscore), eng^.tags)) THEN
  1137.         WriteString (mfile, "\t\t");
  1138.         WriteString (mfile, "gtUnderscore,");
  1139.         WriteFill   (mfile, "", 13);
  1140.         WriteString (mfile, "ORD ('_'),");
  1141.         WriteLn (mfile)
  1142.         END;
  1143.  
  1144.       WriteString (mfile, "\t\t");
  1145.       WriteString (mfile, "tagEnd);");
  1146.       WriteLn (mfile)
  1147.       END WriteGadgetTags;
  1148.  
  1149.  
  1150.  
  1151.     (* WriteCreateGadBody *)
  1152.     BEGIN
  1153.     btop := pw^.topBorder;
  1154.     bleft:= pw^.leftBorder;
  1155.  
  1156.  
  1157.     IF NOT (FontAdapt IN MainConfig.configFlags0) THEN
  1158.       Copy (fontName, Gui.fontName);
  1159.       i := FirstPos (fontName, 0, ".");
  1160.       IF i # -1 THEN
  1161.         fontName[i] := 0C
  1162.         END;
  1163.       ValToStr (Gui.font.ySize, FALSE, fontSize, 10, 1, " ", ok);
  1164.       Concat (fontName, fontSize);
  1165.       END;
  1166.  
  1167.  
  1168.     numGadget := 1;
  1169.     eng := pw^.gadgets.head;
  1170.     WHILE eng^.succ # NIL DO
  1171.       WriteLn (mfile);
  1172.       WriteString (mfile, "(* ");
  1173.       WriteString (mfile, pw^.name);
  1174.       WriteString (mfile, "Gadget");
  1175.       WriteString (mfile, eng^.gadgetLabel);
  1176.       WriteString (mfile, " *)");
  1177.       WriteLn (mfile);
  1178.  
  1179.  
  1180.       WriteString (mfile, "ng := ");
  1181.       WriteString (mfile, pw^.name);
  1182.       WriteString (mfile, "NewGadgets[");
  1183.       WriteCard   (mfile, numGadget, 2);
  1184.       WriteString (mfile, "];");
  1185.       WriteLn (mfile);
  1186.       WriteLn (mfile);
  1187.  
  1188.  
  1189.       WriteString (mfile, "WITH ng DO");
  1190.       WriteLn (mfile);
  1191.  
  1192.       WriteString (mfile, "  visualInfo := VisualInfo;");
  1193.       WriteLn (mfile);
  1194.  
  1195.       IF FontAdapt IN MainConfig.configFlags0 THEN
  1196.         WriteString (mfile, "  textAttr   := Font;");
  1197.         WriteLn (mfile);
  1198.  
  1199.         WriteString (mfile, "  leftEdge   := OffX + ComputeX (leftEdge);");
  1200.         WriteLn (mfile);
  1201.  
  1202.         WriteString (mfile, "  topEdge    := OffY + ComputeY (topEdge);");
  1203.         WriteLn (mfile);
  1204.  
  1205.         IF eng^.kind # genericKind THEN
  1206.           WriteString (mfile, "  width      := ComputeX (width);");
  1207.           WriteLn (mfile);
  1208.  
  1209.           WriteString (mfile, "  height     := ComputeY (height);");
  1210.           WriteLn (mfile)
  1211.           END
  1212.  
  1213.       ELSE
  1214.         WriteString (mfile, "  textAttr   := ADR (");
  1215.         WriteString (mfile, fontName);
  1216.         WriteString (mfile, ");");
  1217.         WriteLn (mfile);
  1218.  
  1219.         WriteString (mfile, "  INC (leftEdge, offx);");
  1220.         WriteLn (mfile);
  1221.  
  1222.         WriteString (mfile, "  INC (topEdge,  offy);");
  1223.         WriteLn (mfile)
  1224.         END;
  1225.  
  1226.       WriteString (mfile, "  END;");
  1227.       WriteLn (mfile);
  1228.       WriteLn (mfile);
  1229.  
  1230.  
  1231.       WriteGadgetTags (eng, pw^.name);
  1232.       WriteLn (mfile);
  1233.  
  1234.  
  1235.       WriteString (mfile, "gad := CreateGadgetA (");
  1236.       CASE eng^.kind OF
  1237.       | genericKind:  WriteString (mfile, "genericKind")
  1238.       | buttonKind:   WriteString (mfile, "buttonKind")
  1239.       | checkboxKind: WriteString (mfile, "checkboxKind")
  1240.       | integerKind:  WriteString (mfile, "integerKind")
  1241.       | listviewKind: WriteString (mfile, "listviewKind")
  1242.       | mxKind:       WriteString (mfile, "mxKind")
  1243.       | numberKind:   WriteString (mfile, "numberKind")
  1244.       | cycleKind:    WriteString (mfile, "cycleKind")
  1245.       | paletteKind:  WriteString (mfile, "paletteKind")
  1246.       | scrollerKind: WriteString (mfile, "scrollerKind")
  1247.       | reservedKind: WriteString (mfile, "reservedKind")
  1248.       | sliderKind:   WriteString (mfile, "sliderKind")
  1249.       | stringKind:   WriteString (mfile, "stringKind")
  1250.       | textKind:     WriteString (mfile, "textKind")
  1251.         END;
  1252.       WriteString (mfile, ", gad^, ng, gadgetTagPtr);");
  1253.       WriteLn (mfile);
  1254.  
  1255.  
  1256.       WriteString (mfile, "IF gad = NIL THEN");
  1257.       WriteLn (mfile);
  1258.  
  1259.       WriteString (mfile, "  RETURN 2");
  1260.       WriteLn (mfile);
  1261.  
  1262.       WriteString (mfile, "  END;");
  1263.       WriteLn (mfile);
  1264.       WriteLn (mfile);
  1265.  
  1266.       WriteString (mfile, pw^.name);
  1267.       WriteString (mfile, "Gadgets[");
  1268.       WriteCard   (mfile, numGadget, 2);
  1269.       WriteString (mfile, "] := gad;");
  1270.       WriteLn (mfile);
  1271.       WriteLn (mfile);
  1272.  
  1273.  
  1274.       IF eng^.kind = genericKind THEN
  1275.         WriteString (mfile, "WITH gad^ DO");
  1276.         WriteLn (mfile);
  1277.  
  1278.         WriteString (mfile, "  flags := flags + GadgetFlagSet {gadgImage,gadgHImage};");
  1279.         WriteLn (mfile);
  1280.  
  1281.         WriteString (mfile, "  INCL (activation, relVerify);");
  1282.         WriteLn (mfile);
  1283.  
  1284.         WriteString (mfile, "  gadgetRender := GetImage;");
  1285.         WriteLn (mfile);
  1286.  
  1287.         WriteString (mfile, "  selectRender := GetImage");
  1288.         WriteLn (mfile);
  1289.  
  1290.         WriteString (mfile, "  END;");
  1291.         WriteLn (mfile)
  1292.         END;
  1293.  
  1294.  
  1295.       eng := eng^.succ;
  1296.       INC (numGadget)
  1297.       END
  1298.     END WriteCreateGadBody;
  1299.  
  1300.  
  1301.  
  1302.     PROCEDURE WriteCreateGadHead        (    pw            :ProjectWindowPtr);
  1303.  
  1304.     BEGIN
  1305.     WriteLn (dfile);
  1306.     WriteString (dfile, "PROCEDURE Create");
  1307.     WriteString (dfile, pw^.name);
  1308.     WriteString (dfile, "Gadgets () :CARDINAL;");
  1309.     WriteLn (dfile);
  1310.     WriteLn (dfile);
  1311.  
  1312.     WriteLn (mfile);
  1313.     WriteString (mfile, "PROCEDURE Create");
  1314.     WriteString (mfile, pw^.name);
  1315.     WriteString (mfile, "Gadgets () :CARDINAL;");
  1316.     WriteLn (mfile);
  1317.     WriteLn (mfile);
  1318.  
  1319.  
  1320.     IF NOT (FontAdapt IN MainConfig.configFlags0) THEN
  1321.       WriteString (mfile, "CONST");
  1322.  
  1323.  
  1324.       WriteString (mfile, "\t");
  1325.       WriteString (mfile, "offx");
  1326.       WriteFill   (mfile, "", 4);
  1327.       WriteString (mfile, "= ");
  1328.       WriteCard   (mfile, pw^.leftBorder, 3);
  1329.       WriteString (mfile, ";");
  1330.       WriteLn (mfile);
  1331.  
  1332.       WriteString (mfile, "\t");
  1333.       WriteString (mfile, "offy");
  1334.       WriteFill   (mfile, "", 4);
  1335.       WriteString (mfile, "= ");
  1336.       WriteCard   (mfile, pw^.topBorder, 3);
  1337.       WriteString (mfile, ";");
  1338.       WriteLn (mfile);
  1339.       WriteLn (mfile)
  1340.       END;
  1341.  
  1342.  
  1343.  
  1344.     WriteString (mfile, "VAR");
  1345.     WriteString (mfile, "\t");
  1346.     WriteString (mfile, "ng");
  1347.     WriteFill   (mfile, "", 2);
  1348.     WriteString (mfile, ":NewGadget;");
  1349.     WriteLn (mfile);
  1350.  
  1351.     WriteString (mfile, "\t");
  1352.     WriteString (mfile, "gad");
  1353.     WriteFill   (mfile, "", 3);
  1354.     WriteString (mfile, ":GadgetPtr;");
  1355.     WriteLn (mfile);
  1356.  
  1357.     WriteString (mfile, "\t");
  1358.     WriteString (mfile, "gadgetTags");
  1359.     WriteFill   (mfile, "", 10);
  1360.     WriteString (mfile, ":ARRAY [1..30] OF TagItem;");
  1361.     WriteLn (mfile);
  1362.  
  1363.     WriteString (mfile, "\t");
  1364.     WriteString (mfile, "gadgetTagPtr");
  1365.     WriteFill   (mfile, "", 12);
  1366.     WriteString (mfile, ":TagItemPtr;");
  1367.     WriteLn (mfile);
  1368.  
  1369.     WriteString (mfile, "\t");
  1370.     WriteString (mfile, "ret");
  1371.     WriteFill   (mfile, "", 3);
  1372.     WriteString (mfile, ":CARDINAL;");
  1373.     WriteLn (mfile);
  1374.     WriteLn (mfile);
  1375.  
  1376.  
  1377.     WriteString (mfile, "BEGIN");
  1378.     WriteLn (mfile);
  1379.  
  1380.     WriteString (mfile, "Assert (");
  1381.     WriteString (mfile, pw^.name);
  1382.     WriteString (mfile, "GadgetList = NIL, ADR ('");
  1383.     WriteString (mfile, pw^.name);
  1384.     WriteString (mfile, "Gadgets are already created!'));");
  1385.     WriteLn (mfile);
  1386.     WriteLn (mfile);
  1387.  
  1388.  
  1389.  
  1390.     IF FontAdapt IN MainConfig.configFlags0 THEN
  1391.       WriteString (mfile, "ComputeFont (");
  1392.       WriteString (mfile, pw^.name);
  1393.       WriteString (mfile, "Width, ");
  1394.       WriteString (mfile, pw^.name);
  1395.       WriteString (mfile, "Height);");
  1396.       WriteLn (mfile)
  1397.       END;
  1398.  
  1399.  
  1400.     WriteString (mfile, "gad := CreateContext (");
  1401.     WriteString (mfile, pw^.name);
  1402.     WriteString (mfile, "GadgetList);");
  1403.     WriteLn (mfile);
  1404.  
  1405.     WriteString (mfile, "IF gad = NIL THEN");
  1406.     WriteLn (mfile);
  1407.  
  1408.     WriteString (mfile, "  RETURN 1");
  1409.     WriteLn (mfile);
  1410.  
  1411.     WriteString (mfile, "  END;");
  1412.     WriteLn (mfile);
  1413.     WriteLn (mfile)
  1414.     END WriteCreateGadHead;
  1415.  
  1416.  
  1417.  
  1418.     PROCEDURE WriteCreateGadTail        (    pw            :ProjectWindowPtr);
  1419.  
  1420.     BEGIN
  1421.     WriteLn (mfile);
  1422.     WriteString (mfile, "RETURN 0");
  1423.     WriteLn (mfile);
  1424.  
  1425.     WriteString (mfile, "END Create");
  1426.     WriteString (mfile, pw^.name);
  1427.     WriteString (mfile, "Gadgets;");
  1428.     WriteLn (mfile);
  1429.     WriteLn (mfile)
  1430.     END WriteCreateGadTail;
  1431.  
  1432.  
  1433.  
  1434.   (* WriteGadgetCreate *)
  1435.   BEGIN
  1436.   IF pw^.gadgets.head^.succ # NIL THEN
  1437.     WriteCreateGadHead (pw);
  1438.     WriteCreateGadBody (pw);
  1439.     WriteCreateGadTail (pw)
  1440.     END
  1441.   END WriteGadgetCreate;
  1442.  
  1443.  
  1444. (* WriteGadgetProcs *)
  1445. BEGIN
  1446. WriteGadgetInit   (pw);
  1447. WriteGadgetCreate (pw)
  1448. END WriteGadgetProcs;
  1449.  
  1450.  
  1451.  
  1452. PROCEDURE WriteGadgetInits    (    pw            :ProjectWindowPtr);
  1453.  
  1454. BEGIN
  1455. IF pw^.gadgets.head^.succ # NIL THEN
  1456.   WriteString (mfile, "Init");
  1457.   WriteString (mfile, pw^.name);
  1458.   WriteString (mfile, "Gadgets;");
  1459.   WriteLn (mfile)
  1460.   END
  1461. END WriteGadgetInits;
  1462.  
  1463.  
  1464.  
  1465. END GenerateGadgets.
  1466.